#include "../include/deng.h"

// 登陆后的起始界面
void user(Node *L)
{
    char hu[] = "正在登录......";
    deng_jindutiao(0, 0, 2, hu);
    int x = L->data.vip;
    if (x == 10)
    {
        printf("欢迎普通用户！\n");
    }
    else if (x == 9)
    {
        printf("欢迎白银用户！\n");
    }
    else if (x == 8)
    {
        printf("欢迎黄金用户！\n");
    }
    else if (x == 7)
    {
        printf("欢迎白金用户！\n");
    }
    user_jiemian(L);
}

// 功能界面
void user_jiemian(Node *L)
{
    while (1)
    {
        printf("请选择你的选项：\n");
        printf("1、购票\t2、退票\t3、余额充值\t4、修改密码\t5、我的订单\t6、查看航班\t7、退出\n");
        int i = 0;
        while (1)
        {
            scanf("%d", &i);
            if (i == 1 || i == 2 || i == 3 || i == 4 || i == 5 || i == 6 || i == 7)
            {
                break;
            }
            else
            {
                printf("输入有误，请重新输入：\n");
                while (getchar() != '\n')
                    ;
                continue;
            }
        }
        system("clear");
        switch (i)
        {
        case 1:
            user_dingdan(L);
            break;
        case 2:
            user_tuipiao(L);
            break;
        case 3:
            user_chongzhi(L);
            break;
        case 4:
            user_xiugai(L);
            break;
        case 5:
            user_kan(L);
            break;
        case 6:
            user_chakan();
            break;
        case 7:
            printf("欢迎使用！\n");
            return;
        default:
            return;
        }
    }
}

// 终点站查询
hang *user_chaxun_zhongdian(Link_hang *H)
{
    int flag_1 = 0;
    char ch2[10]; // 终点站
    hang *P = NULL;
    printf("请输入终点站：\n");
    while (1)
    {
        scanf("%s", ch2);
        hang *ptr_f = H->next;
        for (size_t i = 0; ptr_f != NULL; i++) // 循环比较
        {
            if (strcmp(ptr_f->data.number, ch2) == 0) // 如果有这个终点站
            {
                flag_1 = -98;
                P = ptr_f;
                break;
            }
            ptr_f = ptr_f->next; // 往后移
        }
        if (flag_1 == -98)
        {
            printf("查询到以下航班：\n");
            print_link_hang_1(ptr_f);
            break;
        }
        else
        {
            printf("没有找到该终点站，请重新输入：\n");
            while (getchar() != '\n')
                ;
            continue;
        }
    }
    return P;
}

// 航班号查询
hang *user_chaxun_hangban(Link_hang *H)
{
    int flag_1 = 0;
    char ch1[20]; // 航班号
    hang *P = NULL;
    printf("请输入航班号：\n");
    while (1)
    {
        scanf("%s", ch1);
        hang *ptr = H->next;
        for (size_t i = 0; ptr != NULL; i++) // 循环比较
        {
            if (strcmp(ptr->data.number, ch1) == 0) // 如果有这个航班号
            {
                flag_1 = -98;
                P = ptr;
                break;
            }
            ptr = ptr->next; // 往后移
        }
        if (flag_1 == -98)
        {
            printf("查询到以下航班：\n");
            print_link_hang_1(ptr);
            break;
        }
        else
        {
            printf("没有找到该航班号，请重新输入：\n");
            while (getchar() != '\n')
                ;
            continue;
        }
    }
    return P;
}

// 订票
void user_dingdan(Node *L)
{
    int j = 0;
    hang *H = NULL;
    Link_list *ptr1 = nacun(); // 把文件里面的东西拿出来(名单)
    printf("请选择你需要查询的航班的关键字：\n");
    printf("1、航班号\t");
    printf("2、终点站\n");
    while (1)
    {
        scanf("%d", &j);
        if (j == 1 || j == 2)
        {
            break;
        }
        else
        {
            printf("输入有误，请重新输入：\n");
            while (getchar() != '\n')
                ;
            continue;
        }
    }
    Link_hang *LLL = nacun_hang();
    switch (j)
    {
    case 1:
        H = user_chaxun_hangban(LLL);
        break;
    case 2:
        H = user_chaxun_zhongdian(LLL);
        break;
    default:
        break;
    }
    printf("是否购买？\n");
    printf("1、是\t2、否\n");
    int jj = 0;
    while (1)
    {
        scanf("%d", &jj);
        while (getchar() != '\n')
            ;
        if (jj == 1 || jj == 2)
        {
            break;
        }
        else
        {
            printf("输入有误，请重新输入：\n");
            while (getchar() != '\n')
                ;
            continue;
        }
    }
    if (jj == 1)
    {
        Node *ptr_1 = ptr1->next;
        hang *ptr_2 = LLL->next;
        while (ptr_1 != NULL)
        {
            if (strcmp(ptr_1->data.name, L->data.name) == 0) // 匹配花名册里的人
            {
                ptr_1->data.value -= (H->data.value) * (ptr_1->data.vip) / 10; // 修改余额
                user_dengji(ptr_1);
                strcpy(ptr_1->data.a.data[ptr_1->data.a.len].name, H->data.number); // 在用户的顺序表里写入航班号
                ptr_1->data.a.len++;
                break;
            }
            ptr_1 = ptr_1->next;
        }
        while (ptr_2 != NULL)
        {
            if (strcmp(ptr_2->data.number, H->data.number) == 0) // 匹配航班号
            {
                ptr_2->data.leftbuyersa--; // 修改余票
                break;
            }
            ptr_2 = ptr_2->next;
        }
        fprint_wen(ptr1);
        fprint_hang(LLL);
        fprint_jilu(ptr1);
        free_link_list(&ptr1);
        free_link_hang(&LLL);
        printf("订票成功！\n");
        printf("按下Enter键继续...\n");
        getchar(); // 等待用户按下任意键
        return;
    }
    else
    {
        printf("已取消您的订票！\n");
        free_link_list(&ptr1);
        free_link_hang(&LLL);
        pause_and_continue();
        return;
    }
}

// 退票
void user_tuipiao(Node *L)
{
    int flag_1 = 0;
    char temp[20];
    Link_list *ptr1 = nacun(); // 把文件里面的东西拿出来(名单)
    Node *zhen = ptr1->next;
    for (int j = 0; zhen != NULL; j++)
    {
        if (strcmp(zhen->data.name, L->data.name) == 0)
        {
            break;
        }
        zhen = zhen->next;
    }
    printf("请输入航班号：\n");
    while (getchar() != '\n')
        ;
    int ii = 0;
    while (1)
    {
        scanf("%s", temp);
        for (ii = 0; ii < zhen->data.a.len; ii++)
        {
            if (strcmp(zhen->data.a.data[ii].name, temp) == 0) // 如果有这个航班号
            {
                flag_1 = -98;
                break;
            }
        }
        if (-98 == flag_1)
        {
            printf("您的名单中有该航班号，可以退票！\n");
            break;
        }
        else
        {
            printf("没有购买该航班号，请重新输入：\n");
            while (getchar() != '\n')
                ;
            continue;
        }
    }
    printf("是否退票？\n");
    printf("1、是\t2、否\n");
    while (getchar() != '\n')
        ;
    int j = 0;
    while (1)
    {
        scanf("%d", &j);
        if (j == 1 || j == 2)
        {
            break;
        }
        else
        {
            printf("输入有误，请重新输入：\n");
            while (getchar() != '\n')
                ;
            continue;
        }
    }
    if (j == 1)
    {
        Node *ptr_1 = ptr1->next;
        Link_hang *ptr2 = nacun_hang(); // 把文件里面的东西拿出来(航班)
        hang *ptr_2 = ptr2->next;
        while (ptr_2 != NULL)
        {
            if (strcmp(ptr_2->data.number, temp) == 0) // 匹配航班号
            {
                ptr_2->data.leftbuyersa++; // 修改余票
                break;
            }
            ptr_2 = ptr_2->next;
        }
        while (ptr_1 != NULL)
        {
            if (strcmp(ptr_1->data.name, zhen->data.name) == 0) // 匹配花名册里的人
            {
                ptr_1->data.value += ptr_2->data.value * (L->data.vip) / 10; // 修改余额
                user_dengji(ptr_1);
                if (ii == (ptr_1->data.a.len - 1)) // 修改订单记录
                {
                    ptr_1->data.a.len--; // 票数减少
                }
                else
                {
                    for (int i = ii; i < ptr_1->data.a.len - 1; i++)
                    {
                        ptr_1->data.a.data[i] = ptr_1->data.a.data[i + 1];
                    }
                    ptr_1->data.a.len--;
                }
                break;
            }
            ptr_1 = ptr_1->next;
        }
        fprint_wen(ptr1);
        fprint_jilu(ptr1);
        fprint_hang(ptr2);
        printf("退票成功！\n");
        pause_and_continue();
        free_link_list(&ptr1);
        free_link_hang(&ptr2);
        return;
    }
    else
    {
        printf("已取消您的操作！\n");
        pause_and_continue();
        return;
    }
}

// 根据用户余额改等级
void user_dengji(Node *L)
{
    int temp_1 = L->data.value;
    if (temp_1 >= 20000)
    {
        L->data.vip = 7;
    }
    else if (temp_1 >= 15000)
    {
        L->data.vip = 8;
    }
    else if (temp_1 >= 10000)
    {
        L->data.vip = 9;
    }
    else
    {
        L->data.vip = 10;
    }
    return;
}

// 用户余额充值
void user_chongzhi(Node *L)
{
    int money = 0;
    printf("请输入您需要充值的金额：\n");
    while (getchar() != '\n')
        ;
    scanf("%d", &money);
    Link_list *pt = nacun(); // 把文件里面的东西拿出来(名单)
    Node *pt_1 = pt->next;
    while (pt_1 != NULL)
    {
        if (strcmp(pt_1->data.name, L->data.name) == 0) // 匹配花名册里的人
        {
            pt_1->data.value += money; // 修改余额
            user_dengji(pt_1);
            break;
        }
        pt_1 = pt_1->next;
    }
    printf("充值成功！您的余额为：%d\n", pt_1->data.value);
    int x = pt_1->data.vip;
    if (x == 10)
    {
        printf("当前为普通用户，可继续充值变得更强！\n");
    }
    else if (x == 9)
    {
        printf("当前为白银用户，可继续充值变得更强！\n");
    }
    else if (x == 8)
    {
        printf("当前为黄金用户，可继续充值变得更强！\n");
    }
    else if (x == 7)
    {
        printf("当前为白金用户，已经是最高会员，继续充值可持续享受尊贵！\n");
    }
    fprint_wen(pt);
    free_link_list(&pt);
    pause_and_continue();
    return;
}

// 普通用户的修改密码
void user_xiugai(Node *L)
{
    char pos_1[20];
    char pos_2[20];
    Link_list *pt = nacun(); // 把文件里面的东西拿出来(名单)
    Node *pt_1 = pt->next;
    while (pt_1 != NULL)
    {
        if (strcmp(pt_1->data.name, L->data.name) == 0) // 匹配花名册里的人
        {
            break;
        }
        pt_1 = pt_1->next;
    }
    printf("请输入你的原来密码：\n");
    while (1)
    {
        scanf("%s", pos_1);
        if (strcmp(pos_1, pt_1->data.pos) != 0)
        {
            printf("密码不正确,重新输入\n");
        }
        else
        {
            break;
        }
    }
    printf("请输入你的新密码：\n");
    while (1)
    {
        scanf("%s", pos_2);
        if (strcmp(pos_1, pos_2) == 0)
        {
            printf("密码与之前重复！\n");
        }
        else
        {
            break;
        }
    }
    strcpy(pt_1->data.pos, pos_2);
    fprint_wen(pt);
    free_link_list(&pt);
    printf("修改成功！\n");
    pause_and_continue();
    return;
}

// 查看已购的所有订单
void user_kan(Node *L)
{
    printf("以下是购买的机票\n");
    Link_list *ptr111 = nacun();
    Link_hang *ptr2 = nacun_hang(); // 把文件里面的东西拿出来(航班)
    Node *zhen = ptr111->next;
    for (int j = 0; zhen != NULL; j++)
    {
        if (strcmp(zhen->data.name, L->data.name) == 0)
        {
            break;
        }
        zhen = zhen->next;
    }
    printf("|航班号\t|起点站\t|终点站\t|班期\t\t|机型\t\t|起飞时间\t|到达时间\t|票价\t|额定载客量\t|剩余座位数量\t|是否起飞\t|\n");
    for (int i = 0; i < zhen->data.a.len; i++)
    {
        hang *ptr_1 = ptr2->next;
        while (ptr_1 != NULL)
        {
            if (strcmp(ptr_1->data.number, zhen->data.a.data[i].name) == 0) // 匹配航班号
            {
                printf("|%s\t|%s\t|%s\t|%s\t|%s\t|%s\t\t|%s\t\t|%d\t|%d\t\t|%d\t\t|%c\t\t|\n",
                       ptr_1->data.number, ptr_1->data.staddress, ptr_1->data.arraddress, ptr_1->data.DATE,
                       ptr_1->data.TYPE, ptr_1->data.stime, ptr_1->data.atime, ptr_1->data.value, ptr_1->data.maxNUM, ptr_1->data.leftbuyersa, ptr_1->data.whetherfly);
                break;
            }
            ptr_1 = ptr_1->next;
        }
    }
    pause_and_continue();
    free_link_list(&ptr111);
    free_link_hang(&ptr2);
    return;
}

// 查看航班
void user_chakan()
{
    Link_hang *H = nacun_hang();
    print_link_hang(H);
    free_link_hang(&H);
    pause_and_continue();
    return;
}
